#pragma once

#include "BaseController.h"

/*forward declaration to use Parameter pointers.*/
template <typename T> class Parameter;

/*Base class representing a template source.*/
/*This in-between class is needed for		*/
/*the getters functions.					*/
template <typename T> class Source : public BaseController
{
private:
	/* the current value of the controller */
	T m_value;

public:
	/*virtual destructor*/
	virtual ~Source() {}

	/*calculate and return the value of the output parameter of the controller*/
	virtual const T& getValue() = 0;

	/*return a pointer to the output parameter*/
	virtual Parameter<T>* getOutputParameter()=0;
};
